package com.bjpowernode.handler;

import com.bjpowernode.util.ServiceTools;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {
    //目标对象
    private Object object;//SomeServiceImpl类

    public MyInvocationHandler(Object object) {
        this.object = object;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //这里的形参method就是方法名字
        System.out.println("执行了invoke()");
        //通过代理对象执行方法，会调用这个invoke()
        String methodName=method.getName();
        Object result=null;
        if(methodName.equals("doSome")) {//如果是doSome()方法带有日志和事务
            ServiceTools.doLog();
            //执行目标类的方法，通过Method方法实现
            result = method.invoke(object, args);//SomeService的doSome和doOthers
            ServiceTools.doTransaction();
        }else {
            //走到这里说明不是doSome()方法，不增强日志和事务，但是照常执行
            method.invoke(object,args);
        }
        System.out.println("=====");
        return result;
    }
}
